package gest;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
import java.util.StringTokenizer;

public class CriarUtentes {
	
	static Scanner in = new Scanner (System.in);
	static Registry reg;
	static Gestao g = null;
	static Utente ut;
	String ficheiro;
	
	public CriarUtentes() {
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g= new Gestao_Impl();
	}

	public CriarUtentes(int nu, String nome, int idade){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		try {
			ut = g.cria_utente(nu);
			ut.set_nome(nome);
			ut.set_idade(idade);
		} catch (RemoteException e) {
			e.printStackTrace();
		}	
	}
	
	public CriarUtentes(String nomeficheiro) throws IOException{
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		this.ficheiro = nomeficheiro;
		BufferedReader br = new BufferedReader (new FileReader (this.ficheiro));
		StringTokenizer st = null;
		String teste;
		while((teste = br.readLine()) != null){
			st = new StringTokenizer(teste, ";");
			int nu= Integer.parseInt(st.nextToken());
			ut = g.cria_utente(nu);
			String nome = st.nextToken();
			ut.set_nome(nome);
			int idade= Integer.parseInt(st.nextToken());
			ut.set_idade(idade);	
			imprimeinfo();
		}
	}
	
	public static void main(String[] args) {
		if(args[0].equals("-v")){			
			new CriarUtentes(Integer.parseInt(args[1]),args[2],Integer.parseInt(args[3]));
			imprimeinfo();
			System.exit(0);
		}
		else if (args[0].equals("-f")){
			try {
				new CriarUtentes(args[1]);
				System.exit(0);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if(args[0].equals("-i")){
			CriarUtentes cu = new CriarUtentes();
			CriarUtentes.criar();
			CriarUtentes.resposta();
		}
		else System.out.println("Atributos Incorrectos");
	}
	
	private static void imprimeinfo(){
		try {
			System.out.println(ut.get_nu()+" "+ut.get_nome()+" "+ut.get_idade());
		} catch (RemoteException e) {
			e.printStackTrace();
		}	
	}
	
	public static void criar(){
		try{
			System.out.println("Insira o numero de beneficiario:");
			int a = Integer.parseInt(in.nextLine());
			ut = g.cria_utente(a);
		}catch(RemoteException e) {
			System.out.println("Falha de Ligacao");
			e.printStackTrace();
		}
	}

	private static void inserirnome() {
		System.out.println("Insira o nome:");
		String nome = in.nextLine();
		try {
			ut.set_nome(nome);
			System.out.println("Informacao Actualizada!!");
			
		} catch (RemoteException e) {
			e.getStackTrace();
		}
	}

	private static void inseriridade() {
		System.out.println("Insira idade:");
		int idade = in.nextInt();
		try {
			ut.set_idade(idade);
			System.out.println("Informacao Actualizada!!");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	private static void inserirnu() {
		System.out.println("Insira numero de beneficiario:");
		int nu = in.nextInt();
		try {
			ut.set_nu(nu);
			System.out.println("Informacao Actualizada!!");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	private static void info() {
		System.out.println("Deseja Alterar alguma informacao?");
		System.out.println("1 - nome");
		System.out.println("2 - idade");
		System.out.println("3 - numero de beneficiario");
		System.out.println("4 - ver dados");
		System.out.println("5 - sair");	
	}
	
	public static void resposta(){
			info();
			int a=0;
			try{
			a = Integer.parseInt(in.nextLine());
			switch(a){
			case 1:
				inserirnome();
				resposta();
				break;
			case 2:
				inseriridade();
				resposta();
				break;			
			case 3:
				inserirnu();
				resposta();
				break;
			case 4:
				imprimeinfo();
				resposta();
				break;
			case 5:
				System.exit(0);
				break;
			default:
				resposta();
				break;
			}
			}catch(java.lang.NumberFormatException e){
				System.out.println("Opcao Invalida!");
				resposta();
			}
	}
	
}


